﻿/**
* ...
* @author Ludo
* @version 0.1
*/

import clases.MadParser.PlayByPlay.MadCuarto;
import clases.MadParser.XMLParser.XMLParser;
import clases.utils.MadDate;
import clases.MadParser.IndividualStats.MadJugador;
import clases.MadParser.IndividualStats.MadEquipo;

class clases.MadParser.MadParser {
	
	/* Objeto de parseador */
	private var xmlParser:Object;
	
	/* Tiempo en el que expira la espera, y hay que volver a cargar el XML */
	private var _expires:Number;
	
	/* Variables que tienen el nombre y los id de los equipos */
	private var _nameTeam1:String;
	private var _nameTeam2:String;
	private var _idTeam1:String;
	private var _idTeam2:String;
	
	/* Variables que tienen el nombre de los árbitros */
	private var _referee1:String;
	private var _referee2:String;
	private var _referee3:String;
	
	/* Variables que tiene la fecha del partido */
	private var _dateString:String;
	/* Variables que tiene la hora del partido */
	private var _timeString:String;
	
	/* Hora, en formato entendible y ampliable */
	private var _date:MadDate;
	
	/* Variables que tiene la fase (si es regular, cuartos, etc) */
	private var _phase:String;
	
	/* Variable que tiene el nombre de la competición */
	private var _competition:String;

	/* Variable que tiene el nombre del estadio */
	private var _arena:String;
	
	/* Variable que tiene el número de espectadores */
	private var _spectators:String;

	/* Variable que tiene el tiempo jugado */
	private var _timePlayed:String;
	
	/* Variable que tiene el status actual */
	private var _status:String;
	
	/* Variable que tiene el directorio lógico para buscar las cosas */
	private var _logicalFolder:String;	

	/* Array que contiene los puntos del equipo 1. Cada entrada es un cuarto, y a partir de la entrada 5, son prorrogas */
	private var _arrayPointsTeam1:Array;	

	/* Array que contiene los puntos del equipo 2. Cada entrada es un cuarto, y a partir de la entrada 5, son prorrogas */
	private var _arrayPointsTeam2:Array;	

	/* Array que contiene los jugadores del equipo 1 */
	private var _arrayPlayersTeam1:Array;	

	/* Array que contiene los jugadores del equipo 2 */
	private var _arrayPlayersTeam2:Array;	
	
	/* Array que contiene la lista de equipos */
	private var	_arrayListOfTeams:Array;
	
	/* Variable que contiene la info del equipo 1 */
	private var _team1:MadEquipo;

	/* Variable que contiene la info del equipo 1 */
	private var _team2:MadEquipo;
	
	
	/* Variable que contiene el parcial actual*/
	private var _actualPartial:Number;
		
	/* Array que contendrá las zonas de los equipos */
	private var _arrayZonesTeam1:Array
	private var _arrayZonesTeam2:Array
	
	/* Array que contendrá los cuartos de play by play */
	private var _arrayQuarters:Array

	/* Array que contendrá las acciones de los cuartos anteriores, para hacer comparaciones */
	private var _arrayPreviousQuarters:Array
	
	/**
	 * Constructor de la clase
	 */
	public function MadParser() {
		trace("Creo MadParser");
		_arrayQuarters = new Array();
		_arrayPreviousQuarters = new Array();
	}
	
	/**
	 * parseMarcador
	 * @param	cadena
	 * 
	 * Esta función se encarga de parsear y preparar los datos del marcador, cogidos de cualquier XML recogido, del maindata.
	 * 
	 * El formato que recibo debe de ser parecido a:
	 * 
	 * <euroleague>
		*   <mainData>
			<team1>CSKA MOSCOW</team1>
			<team2>OLYMPIACOS PIRAEUS</team2>
			<referee1>FACCHINI, FABIO [ITA]</referee1>
			<referee2>BELOSEVIC, ILIJA [SCM]</referee2>
			<referee3>PEREZ PIZARRO, EMILIO [ESP]</referee3>
			<date>14/11/2007</date>
			<time>18:15 </time>
			<phase>Regular Season</phase>
			<competition>Euroleague 2007 - 2008</competition>
			<arena>UNIVERSAL SPORTS HALL CSKA</arena>
			<spectators>5000</spectators>
			<timePlayed>40:00</timePlayed>
			<status>off</status>
			<logicalFolder>/Euroleague2007-2008/CSK-OLY-20071114/</logicalFolder>
			<ts>11/29/2007 3:47:19 PM</ts>
			<points team1="88" team2="79">
			  <partial id="1" team1="22" team2="23"/>
			  <partial id="2" team1="23" team2="17"/>
			  <partial id="3" team1="16" team2="22"/>
			  <partial id="4" team1="27" team2="17"/>
			  <partial id="OT" team1="0" team2="0"/>
			</points>
		  </mainData>
	 * </euroleague>
	 * 
	 */
	public function parseMarcador(cadena:String):Boolean
	{
		trace("    Parseo los datos del marcador");
		
		// Inicializo los arrays
		inicializaArrays();
		// Preparo el objeto XML
		xmlParser = new XMLParser(cadena);
		
		if(xmlParser.data.euroleague.expires["in"] != undefined)
		{
			_expires = Number(xmlParser.data.euroleague.expires["in"]);
		}
		else
		{
			_expires = 5;
		}
		
		var data:Object = xmlParser.data.euroleague.mainData;
		
		if (data == undefined)
		{
			return false;
		}
		_nameTeam1 = new String((data.team1 != undefined) ? data.team1 : "");
		_nameTeam2 = new String((data.team2 != undefined) ? data.team2 : "");
		_idTeam1 = new String((data.team1.id != undefined) ? data.team1.id : "");
		_idTeam2 = new String((data.team2.id != undefined) ? data.team2.id : "");
		trace("PEP");
		trace(_idTeam2);
		trace("PEP");
		_referee1 = new String((data.referee1 != undefined) ? data.referee1 : "");
		_referee2 = new String((data.referee2 != undefined) ? data.referee2 : "");
		_referee3 = new String((data.referee3 != undefined) ? data.referee3 : "");
		_date = new MadDate();
		(data.date != undefined) ? _date.setDateFromText(data.date):"";
		(data.time != undefined) ? _date.setTimeFromText(data.time):"";
		_phase = new String((data.phase != undefined) ? data.phase : "");
		_competition = new String((data.competition != undefined) ? data.competition : "");
		_arena = new String((data.arena != undefined) ? data.arena : "");
		_spectators = new String((data.spectators != undefined) ? data.spectators : "");
		_timePlayed = new String((data.timePlayed != undefined) ? data.timePlayed : "");
		_status = new String((data.status != undefined) ? data.status : "");
		_logicalFolder = new String((data.logicalFolder != undefined) ? data.logicalFolder : "");
		
		if(data.points.partial != undefined)
		{
			if(data.points.partial.length == undefined)
			{
				var cp = data.points.partial;
				data.points.partial = new Array();
				data.points.partial.push(cp);
			}
			delete _arrayPointsTeam1;
			delete _arrayPointsTeam2;
			_arrayPointsTeam1 = new Array();
			_arrayPointsTeam2 = new Array();
			trace("****");
			for(var i=0;i<=data.points.partial.length-1;i++)
			{
				trace(data.points.partial[i].current);
				if (data.points.partial[i].current == "true")
				{
					_actualPartial = i + 1;
				}
				
				if (!isNaN(data.points.partial[i].team1))
				{
					_arrayPointsTeam1.push(Number(data.points.partial[i].team1));
				}
				else
				{
					_arrayPointsTeam1.push(0);
				}
				
				
				if (!isNaN(data.points.partial[i].team2))
				{
					_arrayPointsTeam2.push(Number(data.points.partial[i].team2));
				}
				else
				{
					_arrayPointsTeam2.push(0);
				}				
				
			}
		}
		
		return true;
		
	}
	
	
	/**
	 * parseMarcador
	 * @param	cadena
	 * 
	 * Esta función se encarga de parsear y preparar los datos de la lista de equipos, cogidos del XML de listado de equipos
	 * 
	 * El formato que recibo debe de ser parecido a:
	 * 
		<games>
		 <game>
		  <gamecode>uleb_217</gamecode> 
		  <homepts>76</homepts> 
		  <awaypts>86</awaypts> 
		  <fullscore>76-86</fullscore> 
		  <minute>40:00</minute> 
		  <status>off</status> 
		  <hour>20:30</hour> 
		  <team1><![CDATA[GUILDFORD HEAT]]></team1>
		  <team2><![CDATA[SIAULIAI]]></team2>
		  <liveUrl>http://live.euroleague.net/games.aspx?ig=uleb_217&st=90&dp=BPC73FF6F2NB1B9SC11424513&z=0</liveUrl> 
		 </game>
		 <game>
		  <gamecode>uleb_218</gamecode> 
		  <homepts>73</homepts> 
		  <awaypts>81</awaypts> 
		  <fullscore>73-81</fullscore> 
		  <minute>40:00</minute> 
		  <status>off</status> 
		  <hour>19:30</hour> 
		  <team1><![CDATA[ALBA BERLIN]]></team1>
		  <team2><![CDATA[TURK TELEKOM]]></team2>
		  <liveUrl>http://live.euroleague.net/games.aspx?ig=uleb_218&st=90&dp=12711FF6F2NB1B9SC11489371&z=1</liveUrl> 
		 </game>
		</games>
		
	*/
	public function parseListaEquipos(cadena:String):Boolean
	{
		trace("    Parseo los datos del lista de equipos");
		
		// Preparo el objeto XML
		xmlParser = new XMLParser(cadena);

		var data:Object = xmlParser.data.games.game;
		if (data == undefined)
		{
			return false;
		}
		
		// Inicializo los arrays	
		inicializaArrays();

		if (data.length == undefined)
		{
			var copy = data;
			data = new Array();
			data.push(copy);
		}
		
		for (var i = 0; i <= data.length - 1; i++)
		{
			var object = new Object();
			object.code = data[i].gamecode;
			object.url = data[i].liveUrl;
			
			object.team1 = capitalize(data[i].team1);
			object.team2 = capitalize(data[i].team2);
			object.status = data[i].status;
			var score = data[i].fullscore.split("-");
			object.totalPointsTeam = score[0]  + "-" + "<FONT COLOR=\"#F46F08\">" + score[1] + "</FONT>";
			object.hour = data[i].hour;
			_arrayListOfTeams.push(object);
		}
		
		return true;

		
		
		
	}
		
	
	/**
	 * parseIndividualStats
	 * @param	cadena
	 * 
	 * Esta función se encarga de parsear y preparar los datos de las estadísticas individuales, cogidos del modelo explicado a continuación
	 * 
	 * El formato que recibo debe de ser parecido a:
	 * 
	 * <euroleague>
		*   <mainData>
			<fullStats>
			<team1>
			  <team minSeconds="00:00" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="2" rbt="2" st="1" to="0" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="3" /> 
			  <player num="4" code="PATW" name="PAPALOUKAS, THEODOROS" isPlaying="1" minSeconds="19:31" points="14" p2m="5" p2a="6" p2p="83" p3m="0" p3a="1" p3p="0" ftm="4" fta="5" ftp="80" rbo="3" rbd="0" rbt="3" st="0" to="2" as="4" blfv="0" blag="0" fcm="2" frv="5" rkg="19" /> 
			  <player num="6" code="PABN" name="ZISIS, NIKOLAOS" isPlaying="0" minSeconds="16:48" points="2" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="2" fta="2" ftp="100" rbo="3" rbd="0" rbt="3" st="1" to="1" as="2" blfv="0" blag="0" fcm="0" frv="6" rkg="13" /> 
			  <player num="9" code="PJMM" name="SISKAUSKAS, RAMUNAS" isPlaying="1" minSeconds="31:59" points="24" p2m="4" p2a="6" p2p="66" p3m="4" p3a="10" p3p="40" ftm="4" fta="4" ftp="100" rbo="1" rbd="1" rbt="2" st="2" to="1" as="0" blfv="0" blag="1" fcm="2" frv="4" rkg="20" /> 
			  <player num="10" code="PAQO" name="HOLDEN, JON ROBERT" isPlaying="0" minSeconds="22:04" points="9" p2m="0" p2a="1" p2p="0" p3m="3" p3a="5" p3p="60" ftm="0" fta="0" ftp="0" rbo="2" rbd="1" rbt="3" st="0" to="1" as="0" blfv="0" blag="0" fcm="2" frv="0" rkg="6" /> 
			  <player num="11" code="PAYU" name="PASHUTIN, ZAKHAR" isPlaying="0" minSeconds="00:00" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="0" rbt="0" st="0" to="0" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="0" /> 
			  <player num="13" code="PAKT" name="ANDERSEN, DAVID" isPlaying="1" minSeconds="20:34" points="5" p2m="0" p2a="4" p2p="0" p3m="1" p3a="2" p3p="50" ftm="2" fta="2" ftp="100" rbo="3" rbd="1" rbt="4" st="0" to="1" as="0" blfv="0" blag="0" fcm="3" frv="3" rkg="3" /> 
			  <player num="14" code="PALR" name="SAVRASENKO, ALEKSEY" isPlaying="0" minSeconds="24:11" points="6" p2m="3" p2a="3" p2p="100" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="1" rbd="2" rbt="3" st="0" to="1" as="3" blfv="0" blag="0" fcm="4" frv="0" rkg="7" /> 
			  <player num="15" code="PTFF" name="ZABELIN, ARTEM" isPlaying="0" minSeconds="00:00" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="0" rbt="0" st="0" to="0" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="0" /> 
			  <player num="20" code="PLHI" name="VORONCEVICH, ANDREY" isPlaying="0" minSeconds="01:56" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="0" rbt="0" st="0" to="0" as="0" blfv="0" blag="0" fcm="1" frv="0" rkg="-1" /> 
			  <player num="21" code="PBEB" name="LANGDON, TRAJAN" isPlaying="1" minSeconds="32:47" points="21" p2m="4" p2a="7" p2p="57" p3m="4" p3a="6" p3p="66" ftm="1" fta="1" ftp="100" rbo="3" rbd="0" rbt="3" st="2" to="2" as="0" blfv="0" blag="0" fcm="3" frv="3" rkg="19" /> 
			  <player num="22" code="PAUC" name="GOREE, MARCUS" isPlaying="1" minSeconds="30:10" points="7" p2m="3" p2a="9" p2p="33" p3m="0" p3a="1" p3p="0" ftm="1" fta="1" ftp="100" rbo="3" rbd="3" rbt="6" st="1" to="0" as="5" blfv="2" blag="0" fcm="1" frv="1" rkg="14" /> 
			  <player num="23" code="PKVZ" name="SHVED, ALEXEY" isPlaying="0" minSeconds="00:00" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="0" rbt="0" st="0" to="0" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="0" /> 
			</team1>
			<team2>
			  <team minSeconds="00:00" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="1" rbd="0" rbt="1" st="0" to="1" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="0" /> 
			  <player num="4" code="PBFY" name="BLAKNEY, RODERICK" isPlaying="1" minSeconds="08:16" points="2" p2m="0" p2a="1" p2p="0" p3m="0" p3a="2" p3p="0" ftm="2" fta="2" ftp="100" rbo="0" rbd="0" rbt="0" st="0" to="0" as="0" blfv="0" blag="1" fcm="3" frv="0" rkg="-5" /> 
			  <player num="5" code="PACJ" name="PAPAMAKARIOS, MANOLIS" isPlaying="0" minSeconds="00:00" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="0" rbt="0" st="0" to="0" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="0" /> 
			  <player num="6" code="PTFV" name="WOODS, QYNTEL" isPlaying="0" minSeconds="13:46" points="2" p2m="1" p2a="1" p2p="100" p3m="0" p3a="3" p3p="0" ftm="0" fta="0" ftp="0" rbo="2" rbd="0" rbt="2" st="1" to="3" as="0" blfv="0" blag="0" fcm="1" frv="0" rkg="-2" /> 
			  <player num="9" code="PAQU" name="BOUROUSIS, IOANNIS" isPlaying="0" minSeconds="15:12" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="3" rbd="1" rbt="4" st="0" to="1" as="0" blfv="0" blag="0" fcm="2" frv="3" rkg="4" /> 
			  <player num="11" code="PCRR" name="GREER, LYNN" isPlaying="0" minSeconds="34:14" points="27" p2m="6" p2a="8" p2p="75" p3m="3" p3a="4" p3p="75" ftm="6" fta="6" ftp="100" rbo="2" rbd="0" rbt="2" st="0" to="4" as="5" blfv="0" blag="0" fcm="3" frv="8" rkg="32" /> 
			  <player num="13" code="PJRF" name="VASILOPOULOS, PANAGIOTIS" isPlaying="1" minSeconds="16:54" points="7" p2m="2" p2a="5" p2p="40" p3m="1" p3a="2" p3p="50" ftm="0" fta="0" ftp="0" rbo="2" rbd="0" rbt="2" st="1" to="1" as="0" blfv="0" blag="0" fcm="3" frv="0" rkg="2" /> 
			  <player num="14" code="PALG" name="VASILIADIS, KOSTAS" isPlaying="1" minSeconds="24:21" points="3" p2m="0" p2a="0" p2p="0" p3m="1" p3a="3" p3p="33" ftm="0" fta="0" ftp="0" rbo="1" rbd="0" rbt="1" st="0" to="0" as="0" blfv="0" blag="0" fcm="2" frv="1" rkg="1" /> 
			  <player num="16" code="PAMM" name="PRINTEZIS, GEORGIOS" isPlaying="0" minSeconds="21:27" points="8" p2m="4" p2a="4" p2p="100" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="1" rbd="0" rbt="1" st="0" to="1" as="0" blfv="1" blag="0" fcm="3" frv="0" rkg="6" /> 
			  <player num="17" code="PCPF" name="KAFKIS, PANAGIOTIS" isPlaying="0" minSeconds="00:10" points="0" p2m="0" p2a="0" p2p="0" p3m="0" p3a="0" p3p="0" ftm="0" fta="0" ftp="0" rbo="0" rbd="0" rbt="0" st="0" to="1" as="0" blfv="0" blag="0" fcm="0" frv="0" rkg="-1" /> 
			  <player num="18" code="PJDR" name="TEODOSIC, MILOS" isPlaying="1" minSeconds="33:58" points="8" p2m="1" p2a="1" p2p="100" p3m="2" p3a="7" p3p="28" ftm="0" fta="0" ftp="0" rbo="5" rbd="2" rbt="7" st="1" to="1" as="4" blfv="0" blag="0" fcm="3" frv="1" rkg="12" /> 
			  <player num="25" code="P000126" name="JACKSON, MARC" isPlaying="1" minSeconds="31:42" points="22" p2m="6" p2a="11" p2p="54" p3m="2" p3a="3" p3p="66" ftm="4" fta="5" ftp="80" rbo="3" rbd="4" rbt="7" st="0" to="1" as="2" blfv="0" blag="1" fcm="2" frv="5" rkg="25" /> 
			</team2>
			</fullStats>

		  </mainData>
	 * </euroleague>
	 * 
	 */
	public function parseIndividualStats(cadena:String):Boolean
	{
		trace("    Parseo los datos de los jugadores");

		// Inicializo los arrays
		inicializaArrays();
		// Preparo el objeto XML
		xmlParser = new XMLParser(cadena);
		
		
		if(xmlParser.data.euroleague.expires["in"] != undefined)
		{
			_expires = Number(xmlParser.data.euroleague.expires["in"]);
		}
		else
		{
			_expires = 5;
		}
		
		var data:Object = xmlParser.data.euroleague.mainData;
		
		if (data == undefined)
		{
			return false;
		}
		_nameTeam1 = new String((data.team1 != undefined) ? data.team1 : "");
		_nameTeam2 = new String((data.team2 != undefined) ? data.team2 : "");

		var data:Object = xmlParser.data.euroleague.fullStats;
		
		delete _arrayPlayersTeam1;
		_arrayPlayersTeam1 = new Array();
		for(var i=0;i<=data.team1.player.length-1;i++)
		{
			_arrayPlayersTeam1.push(new MadJugador(data.team1.player[i]));
		}
		
		delete _arrayPlayersTeam2;
		_arrayPlayersTeam2 = new Array();
		for(var i=0;i<=data.team2.player.length-1;i++)
		{
			_arrayPlayersTeam2.push(new MadJugador(data.team2.player[i]));
		}
		
		_team1 = new MadEquipo(data.team1.team);
		_team2 = new MadEquipo(data.team2.team);
		
		
		return true;
		
	}
	
	/**
	 * parseTeamStats
	 * @param	cadena
	 * 
	 * Esta función se encarga de parsear y preparar los datos de las estadísticas de los equipos, cogidos del modelo explicado a continuación
	 * 
	 * El formato que recibo debe de ser parecido a:
	 * 
	 * <euroleague>
	 * 	
	 *  <mainData>
			<team1>CSKA MOSCOW</team1>
			<team2>OLYMPIACOS PIRAEUS</team2>
			..
		</mainData>
		  <teamComp>
			<team1 minSeconds="200:00" points="88" p2m="19" p2a="36" p2p="52" p3m="12" p3a="25" p3p="48" ftm="14" fta="15" ftp="93" rbo="19" rbd="10" rbt="29" st="7" to="9" as="14" blfv="2" blag="1" fcm="18" frv="22" rkg="103"/>
			<team2 minSeconds="200:00" points="79" p2m="20" p2a="31" p2p="64" p3m="9" p3a="24" p3p="37" ftm="12" fta="13" ftp="92" rbo="20" rbd="7" rbt="27" st="3" to="14" as="11" blfv="1" blag="2" fcm="22" frv="18" rkg="74"/>
		  </teamComp>
	 * </euroleague>
	 * 
	 */
	public function parseTeamStats(cadena:String):Boolean
	{
		trace("    Parseo los datos de los jugadores");

		// Inicializo los arrays
		inicializaArrays();
		// Preparo el objeto XML
		xmlParser = new XMLParser(cadena);
		
		
		if(xmlParser.data.euroleague.expires["in"] != undefined)
		{
			_expires = Number(xmlParser.data.euroleague.expires["in"]);
		}
		else
		{
			_expires = 5;
		}	
		
		var data:Object = xmlParser.data.euroleague.mainData;
		
		if (data == undefined)
		{
			return false;
		}
		_nameTeam1 = new String((data.team1 != undefined) ? data.team1 : "");
		_nameTeam2 = new String((data.team2 != undefined) ? data.team2 : "");
		_timePlayed = new String((data.timePlayed != undefined) ? data.timePlayed : "");
		var data:Object = xmlParser.data.euroleague.teamComp;
		_team1 = new MadEquipo(data.team1);
		_team2 = new MadEquipo(data.team2);
		_team1._name = _nameTeam1;
		_team2._name = _nameTeam2;
		
		return true;
	}	
		
	
	/**
	 * parseTiros
	 * @param	cadena
	 * 
	 * Esta función se encarga de parsear y preparar los datos de las zonas de los tiros, cogidos del modelo explicado a continuación
	 * 
	 * El formato que recibo debe de ser parecido a:
	 * 
	 * <euroleague>
	 * 	
	 *  <mainData>
			<team1>CSKA MOSCOW</team1>
			<team2>OLYMPIACOS PIRAEUS</team2>
			..
		</mainData>
		<zones>
		  <team1 zoneA="2/4" zoneB="1/4" zoneC="9/14" zoneD="9/15" zoneE="0/2" zoneF="2/3" zoneG="4/11" zoneH="0/1" zoneI="0/0" zoneJ="4/7"/>
		  <team2 zoneA="1/3" zoneB="1/1" zoneC="8/12" zoneD="8/13" zoneE="3/5" zoneF="2/3" zoneG="5/10" zoneH="0/0" zoneI="0/0" zoneJ="1/8"/>
		</zones>
	 * </euroleague>
	 * 
	 */
	public function parseTiros(cadena:String):Boolean
	{
		trace("    Parseo los datos de los tiros");

		// Inicializo los arrays
		inicializaArrays();
		// Preparo el objeto XML
		xmlParser = new XMLParser(cadena);
		
		if(xmlParser.data.euroleague.expires["in"] != undefined)
		{
			_expires = Number(xmlParser.data.euroleague.expires["in"]);
		}
		else
		{
			_expires = 5;
		}	

		var data:Object = xmlParser.data.euroleague.mainData;
		
		if (data == undefined)
		{
			return false;
		}
		_nameTeam1 = new String((data.team1 != undefined) ? data.team1 : "");
		_nameTeam2 = new String((data.team2 != undefined) ? data.team2 : "");		
		var data:Object = xmlParser.data.euroleague.graphicStats.zones;
		
		for(var i in xmlParser.data.euroleague.graphicStats.zones.team1)
		{
			_arrayZonesTeam1[i] = xmlParser.data.euroleague.graphicStats.zones.team1[i];
		}

		for(var i in xmlParser.data.euroleague.graphicStats.zones.team2)
		{
			_arrayZonesTeam2[i] = xmlParser.data.euroleague.graphicStats.zones.team2[i];
		}
		
		return true;
	}	
	
	
	/**
	 * parsePlayByPlay
	 * @param	cadena
	 * 
	 * Esta función se encarga de parsear y preparar los datos de las jugadas PLAY BY PLAY, cogidos del modelo explicado a continuación
	 * 
	 * El formato que recibo debe de ser parecido a:
	 * 
	 * <euroleague>
	 * 	
	 *  <mainData>
			<team1>CSKA MOSCOW</team1>
			<team2>OLYMPIACOS PIRAEUS</team2>
			..
		</mainData>
		<playByPlay quarter="5">
			<action type="0" desc="End Game" pointsTeam1="" pointsTeam2="" minute="41" teamName="" playerName="" /> 
			<action type="0" desc="Minute" pointsTeam1="" pointsTeam2="" minute="41" teamName="" playerName="" /> 
		</playByPlay>
	 * </euroleague>
	 * 
	 */
	public function parsePlayByPlay(cadena:String):Boolean
	{
		trace("    Parseo los datos de play by play");

		// Inicializo los arrays
		inicializaArrays();
		// Preparo el objeto XML
		xmlParser = new XMLParser(cadena);
		
		if(xmlParser.data.euroleague.expires["in"] != undefined)
		{
			_expires = Number(xmlParser.data.euroleague.expires["in"]);
		}
		else
		{
			_expires = 5;
		}	
		
		trace(_expires);

		var data:Object = xmlParser.data.euroleague.mainData;
		
		
		
		if (data == undefined)
		{
			trace("Sin definir");
			return false;
		}
		_nameTeam1 = new String((data.team1 != undefined) ? data.team1 : "");
		_nameTeam2 = new String((data.team2 != undefined) ? data.team2 : "");		
		
		trace(_nameTeam1);
		trace(_nameTeam2);

		if(data.points.partial != undefined)
		{
			if(data.points.partial.length == undefined)
			{
				var cp = data.points.partial;
				data.points.partial = new Array();
				data.points.partial.push(cp);
			}
			delete _arrayPointsTeam1;
			delete _arrayPointsTeam2;
			_arrayPointsTeam1 = new Array();
			_arrayPointsTeam2 = new Array();
			trace(data.points.partial.length - 1);
			for(var i=0;i<=data.points.partial.length-1;i++)
			{
				
				trace(data.points.partial[i].current);
				if (data.points.partial[i].current == "true")
				{
					_actualPartial = i + 1;
				}				
				_arrayPointsTeam1.push(Number(data.points.partial[i].team1));
				_arrayPointsTeam2.push(Number(data.points.partial[i].team2));
			}
		}
		
		var data:Object = xmlParser.data.euroleague.graphicStats.zones;
		
		
		if (_arrayQuarters[xmlParser.data.euroleague.playByPlay.quarter] != undefined)
		{
			_arrayPreviousQuarters[xmlParser.data.euroleague.playByPlay.quarter] = _arrayQuarters[xmlParser.data.euroleague.playByPlay.quarter];
		}
		
		if(xmlParser.data.euroleague.playByPlay)
		{
			/*if(xmlParser.data.euroleague.playByPlay.length == undefined)
			{
				var copy = xmlParser.data.euroleague.playByPlay;
				trace(copy);
				trace(copy.quarter);
				xmlParser.data.euroleague.playByPlay = new Array();
				xmlParser.data.euroleague.playByPlay.push(copy);
			}
			for(var i=0;i<=xmlParser.data.euroleague.playByPlay.length-1;i++)
			{*/
			if(xmlParser.data.euroleague.playByPlay != undefined)
			{
				trace(xmlParser.data.euroleague.playByPlay.quarter);
				trace("Inserto en " + xmlParser.data.euroleague.playByPlay.quarter);
				_arrayQuarters[xmlParser.data.euroleague.playByPlay.quarter] = new MadCuarto(xmlParser.data.euroleague.playByPlay, team1, team2, xmlParser.data.euroleague.playByPlay.quarter);
				
				
				
			}
		}
		
		return true;
	}			
	
	/** inicializaArrays
	 * Función que crea los arrays de fotos y videos 
	 */
	private function inicializaArrays()
	{
		_arrayPointsTeam1 = new Array();
		_arrayPointsTeam2 = new Array();
		_arrayZonesTeam1 = new Array();
		_arrayZonesTeam2 = new Array();
		_arrayListOfTeams = new Array();
	}

	/**
	 * team1
	 * Propiedad que devuelve el nombre del equipo 1
	 */
	public function get team1():String
	{
		return _nameTeam1;
	}
	
	/**
	 * team2
	 * Propiedad que devuelve el nombre del equipo 2
	 */
	public function get team2():String
	{
		return _nameTeam2;
	}

	/**
	 * idTeam1
	 * Propiedad que devuelve el id del equipo 1
	 */
	public function get idTeam1():String
	{
		return _idTeam1;
	}
	
	/**
	 * idTeam2
	 * Propiedad que devuelve el id del equipo 2
	 */
	public function get idTeam2():String
	{
		return _idTeam2;
	}
	
	/**
	 * zoneTeam1
	 * Propiedad que devuelve el valor de la zona para el team1 pasada como parámetro
	 */
	public function zoneTeam1(zone:String):String
	{
		return _arrayZonesTeam1[zone];
	}
	
	/**
	 * listOfTeams
	 * Propiedad que devuelve la lista de equipos cargados
	 */
	public function get listOfTeams():Array
	{
		return _arrayListOfTeams;
	}	
	
	/**
	 * zoneTeam2
	 * Propiedad que devuelve el valor de la zona para el team2 pasada como parámetro
	 */
	public function zoneTeam2(zone:String):String
	{
		return _arrayZonesTeam2[zone];
	}
		
	
	/**
	 * referee1
	 * Propiedad que devuelve el nombre del primer árbitro
	 */
	public function get referee1():String
	{
		return _referee1;
	}
	
	/**
	 * referee2
	 * Propiedad que devuelve el nombre del segundo árbitro
	 */
	public function get referee2():String
	{
		return _referee2;
	}	
	
	/**
	 * referee3
	 * Propiedad que devuelve el nombre del tercer árbitro
	 */
	public function get referee3():String
	{
		return _referee3;
	}	
	
	/**
	 * datetime
	 * Propiedad que devuelve la fecha y hora
	 */
	public function get datetime():String
	{
		return _date.getStandardFormatWithTime();
	}	
	
	/**
	 * Date
	 * Propiedad que devuelve la fecha 
	 */
	public function get date():String
	{
		return _date.getStandardFormat();
	}		
	
	
	/**
	 * DateTwoDigitsYear
	 * Propiedad que devuelve la fecha con año dos dígitos
	 */
	public function get dateTwoDigitsYear():String
	{
		return _date.getDateTwoDigitsYear();
	}			
	
	/**
	 * Time
	 * Propiedad que devuelve la hora
	 */
	public function get time():String
	{
		return _date.getTime();
	}		
		
	
	/**
	 * phase
	 * Propiedad que devuelve la fase en la que se juega el partido
	 */
	public function get phase():String
	{
		return _phase;
	}		

	/**
	 * competition
	 * Propiedad que devuelve la competición en la que se juega el partido
	 */
	public function get competition():String
	{
		return _competition;
	}		
	
	/**
	 * arena
	 * Propiedad que devuelve el nombre del estadio donde se juega el partido
	 */
	public function get arena():String
	{
		return _arena;
	}		
	
	/**
	 * spectators
	 * Propiedad que devuelve el número de espectadores donde se juega el partido
	 */
	public function get spectators():String
	{
		return _spectators;
	}		
	
	/**
	 * timePlayed
	 * Propiedad que devuelve el tiempo jugado de partido
	 */
	public function get timePlayed():String
	{
		return _timePlayed;
	}		

	/**
	 * timePlayed
	 * Propiedad que devuelve el tiempo jugado de partido
	 */
	public function get minutesPlayed():String
	{
		return String(_timePlayed.split(":")[0]);
	}		
	
	/**
	 * status
	 * Propiedad que devuelve el status actual del partido
	 */
	public function get status():String
	{
		return _status;
	}	
	
	/**
	 * logicalfolder
	 * Propiedad que devuelve el directorio donde se pueden encontrar las cosas
	 */
	public function get logicalFolder():String
	{
		return _logicalFolder;
	}		
	
	/**
	 * totalPointsTeam1
	 * Propiedad que devuelve el total de puntos del equipo 1
	 */
	public function get totalPoinsTeam1():Number
	{
		var sum = new Number();
		for(var i=0;i<=_arrayPointsTeam1.length-1;i++)
		{
			if (!isNaN(_arrayPointsTeam1[i]))
			{
				sum += _arrayPointsTeam1[i];
			}
		}
		return sum
	}		
	
	/**
	 * actualPartial
	 * Propiedad que devuelve el parcial en el que se está jugando
	 */
	public function get actualPartial():Number
	{
		
		/*for (var i = 0; i <= _arrayPointsTeam1.length - 1; i++)
		{
			if ((_arrayPointsTeam1[i] == 0) && (_arrayPointsTeam2[i] == 0))
			{
				return i;
			}
		}
		return i - 1;*/
		return _actualPartial;
	}		
	
	/**
	 * totalPointsTeam2
	 * Propiedad que devuelve el total de puntos del equipo 2
	 */
	public function get totalPoinsTeam2():Number
	{
		var sum = new Number();
		for(var i=0;i<=_arrayPointsTeam2.length-1;i++)
		{
			if (!isNaN(_arrayPointsTeam2[i]))
			{
				sum += _arrayPointsTeam2[i];
			}
		}
		return sum
	}	
	
	/**
	 * pointsOfTeam1InPartial
	 * Propiedad que devuelve los puntos del equipo 1 en un parcial pasado como parámetro
	 * param partial
	 */
	public function poinsOfTeam1InPartial(partial:Number):Number
	{
		if(_arrayPointsTeam1[partial-1] == undefined)
		{
			return 0
		}
		else
		{
			return _arrayPointsTeam1[partial-1];
		}
	}	
	
	/**
	 * pointsOfTeam2InPartial
	 * Propiedad que devuelve los puntos del equipo 2 en un parcial pasado como parámetro
	 * @param partial
	 */
	public function poinsOfTeam2InPartial(partial:Number):Number
	{
		return _arrayPointsTeam2[partial-1];
	}		

	
	/**
	 * pointsOfTeamInPartial
	 * Propiedad que devuelve los puntos del un equipo en un parcial pasado como parámetro
	 * @param partial
	 */
	public function poinsOfTeamInPartial(team:Number,partial:Number):Number
	{
		if(team == 1)
		{
			return _arrayPointsTeam1[partial-1];
		}
		else
		{
			return _arrayPointsTeam2[partial-1];
		}
	}	
	
	/** 
	 * dumpMarcador
	 * Tracea todos los parámetros del marcador
	 **/
	private function dumpMarcador()
	{
		trace("Equipo 1: "+team1);
		trace("Equipo 2: "+team2);
		trace("Árbitro 1: "+referee1);
		trace("Árbitro 2: "+referee2);
		trace("Árbitro 3: "+referee3);
		trace("Fecha y hora: "+datetime);
		trace("Fase: "+phase);
		trace("Competición: "+competition);
		trace("Estadio: "+arena);
		trace("Espectadores: "+spectators);
		trace("Tiempo de juego: "+timePlayed);
		trace("Estatus: "+status);
		trace("Directorio lógico: "+logicalFolder);
		trace("Total puntos equipo 1: "+totalPoinsTeam1);
		trace("Total puntos equipo 2: "+totalPoinsTeam2);
		
		for(var i=0;i<=_arrayPointsTeam1.length-1;i++)
		{
			trace("Parcial " + Number(i+1) + " equipo 1: "+poinsOfTeam1InPartial(i+1));
		}
		
		for(var i=0;i<=_arrayPointsTeam2.length-1;i++)
		{
			trace("Parcial " + Number(i+1) + " equipo 2: "+poinsOfTeam2InPartial(i+1));
		}		
	}
	
	/**
	 * playersTeam1
	 * Devuelve el array de los jugadores del equipo 1
	 */
	public function get playersTeam1():Array
	{
		return _arrayPlayersTeam1
	}
	
	/**
	 * playersTeam2
	 * Devuelve el array de los jugadores del equipo 2
	 */
	public function get playersTeam2():Array
	{
		return _arrayPlayersTeam2
	}	
	
	/* team1Info
	 * Devuelve la información del equipo 1
	 */
	public function get team1Info():Object
	{
		return _team1;
	}

	/* team2Info
	 * Devuelve la información del equipo 1
	 */
	public function get team2Info():Object
	{
		return _team2;
	}
	
	/* expires
	 * Nos devuelve el numéro de segundos que tardará en volver a solicitar el XML
	 */
	public  function get expires():Number
	{
		return _expires;
	}
	 
	/* getActionsOfQuarter
	 * Devuelve el array de acciones del cuarto enviado como parámetro
	 */
	public function getActionsOfQuarter(quarter:Number)
	{
		return _arrayQuarters[quarter].arrayActions;
	}
	
	/* getActionsOfPreviousQuarter
	 * Devuelve el array de acciones guardadas del anterior cuarto enviado como parámetro
	 */
	public function getActionsOfPreviousQuarter(quarter:Number)
	{

		return _arrayPreviousQuarters[quarter].arrayActions;
	}
	
	
	/* getNumberOfQuarters
	 * Devuelve el numero de cuartos
	 */
	public function getNumberOfCuarters():Number
	{
		return _arrayQuarters.length-1;
	}	
	
	private function capitalize(item:String):String
	{
		var res:String = new String();
		var arr = item.split(" ");
		for(var i=0;i<=arr.length-1;i++)
		{
			res += arr[i].charAt(0).toUpperCase() + arr[i].substring(1).toLowerCase() + " ";
		}
		
		res = res.substr(0, res.length-1);
		return res;
	}


	
}